// 引入gulp
var gulp = require('gulp');             // 基础库

// 引入gulp插件
var livereload = require('gulp-livereload'), // 网页自动刷新（服务器控制客户端同步刷新）
    webserver = require('gulp-webserver'), // 本地服务器
    uglify=require('gulp-uglify'),//引入压缩js代码的模块
    rename=require('gulp-rename'),//引入重命名的模块
    // sourcemaps=require('gulp-sourcemaps'),//引入来源地图的模块
    minificss=require('gulp-minify-css'),//引入压缩css代码的模块
    imagemin=require('gulp-imagemin'),//图片压缩模块
    pngquant=require('imagemin-pngquant'),//深度压缩模块
    concat=require('gulp-concat'),//引入合并文件的模块
    // notify = require('gulp-notify'),//引入提示less编译错误的信息的模块
    // plumber = require('gulp-plumber'),//引入当less出现错误时不终止watch事件的模块
    less=require('gulp-less');//引入less预编译模块

// 注册任务
gulp.task('webserver', function() {
    gulp.src('./src') // 服务器目录（./代表根目录）
    .pipe(webserver({ // 运行gulp-webserver
        livereload: true, // 启用LiveReload
        open:'index.html' // 服务器启动时自动打开网页
    }));
});

//将HTML文件移动至发布环境
gulp.task('html',function(){
	return gulp.src('src/**/*.html')//指明源文件路径
	.pipe(gulp.dest('dist'));//输出路径
})
//压缩js代码
gulp.task('min-js',function(){
	return gulp.src(['src/js/**/*.js','!*.min.js'])//指明源文件路径，并进行文件匹配，排除.min.js后缀的文件
	// .pipe(sourcemaps.init()) //执行sourcemaps
	.pipe(rename({suffix:'.min'}))//文件重命名
	.pipe(uglify())//压缩js
	// .pipe(sourcemaps.write('../maps'))//地图输出路径(存放位置)
	.pipe(gulp.dest('dist/js'));//输出文件
})

//压缩css
gulp.task('minify-css',function(){
	return gulp.src(['src/less/*.css','!*.min.css'])//指明源文件路径
	.pipe(rename({suffix:'.min'}))//文件重命名
	.pipe(minificss())//压缩css
	.pipe(gulp.dest('dist/css'));//输出文件

})

//压缩图片
gulp.task('img',function(){
	return gulp.src('src/img/*.{jpg,png,gif,svg}')//指明源文件路径，并进行文件匹配
	.pipe(imagemin({
		progressive:true,//无损压缩JPG图片
		svgoPlugins:[{removeViewBox:false}],//不移除SVG的viewbox属性
		use:[pngquant()]//使用pngquant插件进行深度压缩
	}))
	.pipe(gulp.dest('dist/img'));//输出路径
});

//预编译less文件
gulp.task('less',function(){
	gulp.src('src/less/*.less')//资源路径
	// .pipe(plumber({errorHandler: notify.onError('Error: <%= error.message %>')}))//发生异常时需要处理的代码
	.pipe(less())//less编译
	.pipe(gulp.dest('src/less'));//输出路径
})

//合并js文件
// gulp.task('concat_js',['min-js'],function(){//
// 	gulp.src('dist/js/**/*.min.js')//要合并的js文件
// 	.pipe(concat('libs.js'))//合并成libs.js
// 	.pipe(gulp.dest('dist/js'));//合并后的js的输出路径
// })

//合并css文件
gulp.task('concat_css',['minify-css'],function(){
	gulp.src('dist/css/*.min.css')//要合并的css文件
	.pipe(concat('libs.css'))//合并成libs.css
	.pipe(gulp.dest('dist/css'));//合并后的css的输出路径
})


// 监听任务
gulp.task('watch',function(){
    gulp.watch( '*.html');// 监听根目录下所有.html文件
    gulp.watch('src/js/**/*.js',['min-js']);//监听js下面所有的.js文件
    gulp.watch('src/less/*.css',['minify-css']);//监听css下面所有的css文件
    gulp.watch('src/img/*.{jpg,png,gif,svg}',['img']);//监听img下面所有的图片文件
    // gulp.watch('dist/**/*.min.js',['concat_js']);//监听发布目录下面的所有的min.js的文件
    gulp.watch('dist/**/*.min.css',['concat_css']);//监听发布目录下面的所有的min.css的文件
   gulp.watch('src/less/*.less',['less']);//监听less下面所有的less文件
});

// 默认任务
gulp.task('default',['webserver','html','min-js','minify-css','img','less','concat_css','watch']);
